package com.rxjava;

import java.util.ArrayList;
import java.util.List;

import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.functions.BiFunction;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;

//merge：将两个Observable发射的事件序列组合成一个事件序列，就像是一个Observable发射的一样，你可以简单的将它理解为两个Observable合并成了一个Observable
//startWith：用于在源Observable发射的数据前插入数据，使用startWith(Iterable)还可以在Observable发射的数据前插入Iterable。
//combineLatest：是在其中一个Observable发射数据项后，组合所有Observable所发射的最后一个数据项（前提是所有的Observable都至少发射过一个数据项）。
public class MergeDemo {

	public static void main(String[] args) {
		Observable.merge(
			Observable.just(10, 20, 30),
			Observable.just(4, 8, 12, 16)
		).subscribe(x -> System.out.println(x));
		System.out.println("=====================");

		Observable.just(10, 20, 30)
		.startWith(Observable.just(4, 8, 12, 16))
		.subscribe(x -> System.out.println(x));
		System.out.println("=====================");

		Observable.combineLatest(
			Observable.just("o1", "o2", "o3"),
			Observable.just("o4", "o5", "o6"),
			new BiFunction<String, String, String>(){
				@Override
	            public String apply(String s, String s2) {
					System.out.println("combine --- >, s = " + s + " | s2 = " + s2);
	                return s + s2;
	            }
			}
		).subscribe(x -> System.out.println(x));
	}

}
